package xyz.erupt.flow.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.var;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import xyz.erupt.core.exception.EruptApiErrorTip;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author PP
 * @version 1.0
 * @project Erupt
 * @description 替换html字符串
 * @date 2024/9/18 09:22:52
 */
public class HtmlVariableReplacer {

    /**
     * 替换HTML字符串中的${变量名}为Map中对应的实际值
     *
     * @param html      含有占位符的HTML字符串
     * @param variables 存储变量名和对应替换值的Map
     * @return 替换后的HTML字符串
     */
    public static String replaceVariables(String html, Map<String, String> variables) {
        // 正则表达式匹配 ${变量名}
        Pattern pattern = Pattern.compile("\\$\\{(\\w+)}");
        Matcher matcher = pattern.matcher(html);

        StringBuffer result = new StringBuffer();

        while (matcher.find()) {
            // 获取变量名
            String variableName = matcher.group(1);

            // 查找对应变量的替换值，如果不存在，使用空字符串代替
            String replacement = variables.getOrDefault(variableName, "");

            // 替换匹配到的${变量名}为实际内容
            matcher.appendReplacement(result, replacement);
        }
        matcher.appendTail(result);

        return result.toString();
    }
    //添加系统字段
    public static void addSystemTimeVariables(Map<String,String> variables){
        var date =new Date(System.currentTimeMillis());
        variables.put("currentDate",new SimpleDateFormat("yyyy年MM月dd日").format(date));//当前日期
        variables.put("currentTime",new SimpleDateFormat("HH:mm:ss").format(date));//当前时间
    }

    /***
     * @description TODO 查找表单guid
     * @param html
     * @return java.lang.String
     * @author PP
     * @date 2024/10/14 18:02:58
     */
    public static String findGuid(String html){
        // 解析 HTML
        Document doc = Jsoup.parse(html);

        // 查找特定标签
        Element contentDiv = doc.getElementById("guid");

        if (contentDiv != null) {
            // 输出标签内容
            return contentDiv.text();
        } else {
           throw new EruptApiErrorTip("未找到标签");
        }
    }
}
